Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - [DELPHI] Evento OnClientDisconnect TServerSocket
Forum - Delphi - [DELPHI] Evento OnClientDisconnect TServerSocket

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
givex8 (Normal User)
Rookie


Messaggi: 28
Iscritto: 05/03/2011

Segnala al moderatore
Postato alle 14:43
Sabato, 30/04/2011
Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti

PM Quote
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 16:13
Sabato, 30/04/2011
Testo quotato

Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti



Basta con i trojan! Fai qualcosa di piu costruttivo

PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 16:46
Sabato, 30/04/2011
Testo quotato

Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti



se non erro nell'evento OnClientDisconnect(Sender: TObject;  Socket: CustomWinSocket);
Hai a disposizione il sender e il socket che stai disconnetendo, se hai enumerato le connessioni riesci a risalire al numero di quella che si sta disconnettendo.
G.


Ibis redibis non morieris in bello
PM Quote
Avatar
givex8 (Normal User)
Rookie


Messaggi: 28
Iscritto: 05/03/2011

Segnala al moderatore
Postato alle 17:59
Sabato, 30/04/2011
Testo quotato

Postato originariamente da smanettone83:

Testo quotato

Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti



Basta con i trojan! Fai qualcosa di piu costruttivo



Non sto facendo un trojan!

PM Quote
Avatar
givex8 (Normal User)
Rookie


Messaggi: 28
Iscritto: 05/03/2011

Segnala al moderatore
Postato alle 18:01
Sabato, 30/04/2011
Testo quotato

Postato originariamente da Goblin:

Testo quotato

Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti



se non erro nell'evento OnClientDisconnect(Sender: TObject;  Socket: CustomWinSocket);
Hai a disposizione il sender e il socket che stai disconnetendo, se hai enumerato le connessioni riesci a risalire al numero di quella che si sta disconnettendo.
G.



Ciao, potresti farmi un piccolo esempio di codice per capire meglio?
Grazie!

PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 23:59
Sabato, 30/04/2011
non ho nessun esempio sotto mano, ho solo letto l'evento e postato la risposta, cmq ti posso costruire al volo un meta codice.

1) vediamo la classe TCustomWinSocket se ha qualche property dove salvare delle info per poi rileggere a nostro piacimento ... beccata !! la propertty DATA è un puntatore, bene potrebbe fare al caso nostro.
2) mi creo un record dove poter salvare le informazioni che mi servono, dunque:
type
  TTestRec= packed record
    s:String; // informazioni testo
    n: Integer; // info numeriche
end;
ma così non va bene .. dobbiamo lavorare con i puntatori, (come li odio) dunque
PTestRec = ^TTestRec;
bene ho creato il record dove salvare le info di cui ho bisogno.
nell'evento OnClientConnect(Sender: TObject;  Socket: TCustomWinSocket); salvo le info che mi interessano:
Var oMyRec: PTestRec;
begin
.....
  New(oMyRec);
  oMyRec.s := Socket.RemoteHost;
  oMyRec.n := FNumeroClient;  // property che conta i client attaccati
  inc(FNumeroClient); // aumenta il numero
  Socket.Data := Pointer(oMyRec); // salvo nel socket i dati
...
end;
adesso devo andare a riprendere le informazioni nel momento del disconnect dunque  OnClientDisconnect(Sender: TObject;  Socket: CustomWinSocket);
devo testare cosa c'e' dentro la property data del socket
  ShowMessage(' Client Numero: '+ IntToStr(PTestRec(Socket.Data).n));
  ShowMessage(' Client Nome: '+ PTestRec(Socket.Data).s);

Il tutto è fatto al volo senza testarlo, ma dovrebbe funzionare, si può migliorare sostituendo una collection al record, ma .. i record sono più semplici da gestire.
Fammi sapere :)
G






Ibis redibis non morieris in bello
PM Quote
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 3:14
Domenica, 01/05/2011
Testo quotato

Postato originariamente da Goblin:

non ho nessun esempio sotto mano, ho solo letto l'evento e postato la risposta, cmq ti posso costruire al volo un meta codice.

1) vediamo la classe TCustomWinSocket se ha qualche property dove salvare delle info per poi rileggere a nostro piacimento ... beccata !! la propertty DATA è un puntatore, bene potrebbe fare al caso nostro.
2) mi creo un record dove poter salvare le informazioni che mi servono, dunque:
type
  TTestRec= packed record
    s:String; // informazioni testo
    n: Integer; // info numeriche
end;
ma così non va bene .. dobbiamo lavorare con i puntatori, (come li odio) dunque
PTestRec = ^TTestRec;
bene ho creato il record dove salvare le info di cui ho bisogno.
nell'evento OnClientConnect(Sender: TObject;  Socket: TCustomWinSocket); salvo le info che mi interessano:
Var oMyRec: PTestRec;
begin
.....
  New(oMyRec);
  oMyRec.s := Socket.RemoteHost;
  oMyRec.n := FNumeroClient;  // property che conta i client attaccati
  inc(FNumeroClient); // aumenta il numero
  Socket.Data := Pointer(oMyRec); // salvo nel socket i dati
...
end;
adesso devo andare a riprendere le informazioni nel momento del disconnect dunque  OnClientDisconnect(Sender: TObject;  Socket: CustomWinSocket);
devo testare cosa c'e' dentro la property data del socket
  ShowMessage(' Client Numero: '+ IntToStr(PTestRec(Socket.Data).n));
  ShowMessage(' Client Nome: '+ PTestRec(Socket.Data).s);

Il tutto è fatto al volo senza testarlo, ma dovrebbe funzionare, si può migliorare sostituendo una collection al record, ma .. i record sono più semplici da gestire.
Fammi sapere :)
G






troppa confusione a mio parere... usa questo metodo sicuramente piu semplice.. metti un Tmemo nella form e sull'evento onconnect del server gli dirai di fare:

memo1.lines.add(socket.remoteaddress);

in questo modo aggiungerai tutte le connessione attive in lista.

poi sull'evento ondisconnect del server creerai un ciclo for che controllerà tutte le connessione remote presenti, in questo modo:

dichiara una variabile integer

var
c:= integer;
begin
for c:=0 to memo1.lines.count -1 do begin
if memo1.lines[c]=socket.remoteaddress then begin
memo1.lines[c]:= memo1.lines[c] + ' si è disconnesso';
end;
end;

cosi facendo il cliclo controllera' se l'indirizzo remoto disconnesso è nella lista... in quel caso ti avvisera'... e' sicuramente funzionante anche se non lo ho testato... prova a fammi sapere... spero che il software che stai creando verrà usato nel modo giusto anche se leggendo i tuoi vecchi topic ho molti dubbi... a buon intentor poche parole... ;)

PM Quote
Avatar
givex8 (Normal User)
Rookie


Messaggi: 28
Iscritto: 05/03/2011

Segnala al moderatore
Postato alle 15:34
Lunedì, 02/05/2011
Testo quotato

Postato originariamente da smanettone83:

Testo quotato

Postato originariamente da Goblin:

non ho nessun esempio sotto mano, ho solo letto l'evento e postato la risposta, cmq ti posso costruire al volo un meta codice.

1) vediamo la classe TCustomWinSocket se ha qualche property dove salvare delle info per poi rileggere a nostro piacimento ... beccata !! la propertty DATA è un puntatore, bene potrebbe fare al caso nostro.
2) mi creo un record dove poter salvare le informazioni che mi servono, dunque:
type
  TTestRec= packed record
    s:String; // informazioni testo
    n: Integer; // info numeriche
end;
ma così non va bene .. dobbiamo lavorare con i puntatori, (come li odio) dunque
PTestRec = ^TTestRec;
bene ho creato il record dove salvare le info di cui ho bisogno.
nell'evento OnClientConnect(Sender: TObject;  Socket: TCustomWinSocket); salvo le info che mi interessano:
Var oMyRec: PTestRec;
begin
.....
  New(oMyRec);
  oMyRec.s := Socket.RemoteHost;
  oMyRec.n := FNumeroClient;  // property che conta i client attaccati
  inc(FNumeroClient); // aumenta il numero
  Socket.Data := Pointer(oMyRec); // salvo nel socket i dati
...
end;
adesso devo andare a riprendere le informazioni nel momento del disconnect dunque  OnClientDisconnect(Sender: TObject;  Socket: CustomWinSocket);
devo testare cosa c'e' dentro la property data del socket
  ShowMessage(' Client Numero: '+ IntToStr(PTestRec(Socket.Data).n));
  ShowMessage(' Client Nome: '+ PTestRec(Socket.Data).s);

Il tutto è fatto al volo senza testarlo, ma dovrebbe funzionare, si può migliorare sostituendo una collection al record, ma .. i record sono più semplici da gestire.
Fammi sapere :)
G






troppa confusione a mio parere... usa questo metodo sicuramente piu semplice.. metti un Tmemo nella form e sull'evento onconnect del server gli dirai di fare:

memo1.lines.add(socket.remoteaddress);

in questo modo aggiungerai tutte le connessione attive in lista.

poi sull'evento ondisconnect del server creerai un ciclo for che controllerà tutte le connessione remote presenti, in questo modo:

dichiara una variabile integer

var
c:= integer;
begin
for c:=0 to memo1.lines.count -1 do begin
if memo1.lines[c]=socket.remoteaddress then begin
memo1.lines[c]:= memo1.lines[c] + ' si è disconnesso';
end;
end;

cosi facendo il cliclo controllera' se l'indirizzo remoto disconnesso è nella lista... in quel caso ti avvisera'... e' sicuramente funzionante anche se non lo ho testato... prova a fammi sapere... spero che il software che stai creando verrà usato nel modo giusto anche se leggendo i tuoi vecchi topic ho molti dubbi... a buon intentor poche parole... ;)



Ciao, la tua soluzione funziona molto bene... Grazie della risposta!
L'unica pecca è se due pc hanno lo stesso Indirizzo IP (ad esempio in una LAN), il server vede disconnessi entrambi...

PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 17:43
Lunedì, 02/05/2011
usa il nome e/o l'indirizzo fisico (mac address), per discriminarli


Ibis redibis non morieris in bello
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo